package gestione_risorse_umane;

import java.io.PrintStream;
import java.util.ArrayList;
import java.util.HashMap;

import database.GestioneCateringDB2;

public class ArchivioDipendentiInPiantaStabile extends ArchivioDipendentiInPiantaStabileSubject{
	public ArchivioDipendentiInPiantaStabile() throws ClassNotFoundException
	{
		super();
		db = new GestioneCateringDB2();
		ArrayList<String> date = db.getDateEventi();
		mansioni = new ArrayList<Mansione>();
		for(String d: date)
		{
			HashMap<String, Integer> m = getDisponibilitaMansioniData(d);
			mansioni.add(new Mansione("cameriere", m.get("cameriere"), d));
			mansioni.add(new Mansione("cuoco", m.get("cuoco"), d));
			mansioni.add(new Mansione("hostess", m.get("hostess"), d));
			mansioni.add(new Mansione("steward", m.get("steward"), d));
		}
	}
	
	private HashMap<String, Integer> getDisponibilitaMansioniData(String data)
	{
		ArrayList<DipendentePiantaStabile> dipendenti = db.getDipendentiPiantaStabile();
		//ArrayList<DipendentePiantaStabile> dipendentiLiberi = new ArrayList<DipendentePiantaStabile>();
		int cCamer = 0, cCuoc = 0, cHost = 0, cStew = 0; 
		for(DipendentePiantaStabile d : dipendenti)
		{
			if(!d.containData(data))
			{
				if(d.getMansione().equalsIgnoreCase("cameriere"))
					cCamer++;
				if(d.getMansione().equalsIgnoreCase("cuoco"))
					cCuoc++;
				if(d.getMansione().equalsIgnoreCase("hostess"))
					cHost++;
				if(d.getMansione().equalsIgnoreCase("steward"))
					cStew++;
			}
		}
		HashMap<String, Integer> disponibilitaMansioni = new HashMap<String, Integer>();
		disponibilitaMansioni.put("cameriere", cCamer);
		disponibilitaMansioni.put("cuoco", cCuoc);
		disponibilitaMansioni.put("hostess", cHost);
		disponibilitaMansioni.put("steward", cStew);
		return disponibilitaMansioni;
	}
	public void print()
	{
		System.out.println("//////////////////////");
		for(Mansione m : mansioni)
		{
			System.out.println(m.getMansione() + " " + m.getNumero() + " " + m.getData());
		}
	}
	//calcola il numero di dipendenti disponibili per una certa mansione in una certa data
	public int getNumeroPerMansione(String mansione, String data)
	{
		for(Mansione m: mansioni)
		{
			if(m.getMansione().equalsIgnoreCase(mansione) && m.getData().equalsIgnoreCase(data))
				return m.getNumero();
		}
		return -1;
	}
	public void updateMansione(String mansione, int numero, String data)
	{
		for(Mansione m : mansioni)
		{
			if(m.getMansione().equalsIgnoreCase(mansione) && m.getData().equalsIgnoreCase(data))
			{
				int nuovoNumero = 0;
				nuovoNumero = m.getNumero() - numero; // raffaele ha detto che deve essere "+ numero"!! 
				m.setNumero(nuovoNumero);
			}
		}
		notify(mansione, numero, data);
	}
private ArrayList<Mansione> mansioni;
private GestioneCateringDB2 db;
}
